package signleton;

public class DoubleCheck {
    // 1、构造器私有化
    private DoubleCheck() {
    }

    // 2、类的内部声明对象，同时用`volatile`关键字修饰修饰
    private static volatile DoubleCheck instance;

    // 3、向外暴露一个静态的公共方法，加入同步处理的代码块，并进行双重判断，解决线程安全问题
    public static DoubleCheck getInstance() {
        if (instance == null) {
            synchronized (DoubleCheck.class) {
                if (instance == null) {
                    instance = new DoubleCheck();
                }
            }
        }
        return instance;
    }
}